package com.ruoyi.wechat;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.wechat.api.WechatApi;
import com.ruoyi.wechat.api.WechatXcxApi;
import com.ruoyi.wechat.vo.templatemsg.TemplateData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 * @name：TemplateMsgUtil.java
 * @description：发送模板消息
 * @author Administrator
 * @since 2017年11月21日
 *
 */
public class TemplateMsgUtil {

	static Logger logger = LoggerFactory.getLogger(TemplateMsgUtil.class);
	
	
	/**
	 * 订单支付成功通知
	 * @param openId
	 * @param map
	 */
	public static void orderPayPush(String openId , Map<String, String> map){
		//订单支付成功通知模板ID
		final String weapp_template_id = "HBENMpzZ6oOEAatwHgMJnPf6rt5pRGS7-vK465X2KJI";
		// 推送微信消息
		JSONObject data = new JSONObject();
		Map<String, Object> mapT = new HashMap<>();
		mapT.put("value", map.get("keyword1"));
		data.put("character_string5",mapT);//单号
		
		mapT.put("value", map.get("keyword2"));
		data.put("amount2",mapT);//金额
		
		mapT.put("value", map.get("keyword3"));
		data.put("date3",mapT);//支付时间
		
		mapT.put("value", map.get("keyword4"));
		data.put("thing7",mapT);//温馨提示

        
        //小程序模板消息相关的信息，可以参考小程序模板消息接口; 有此节点则优先发送小程序模板消息
        JSONObject weapp_template_msg = new JSONObject();
        weapp_template_msg.put("template_id", weapp_template_id);//小程序模板ID
        weapp_template_msg.put("page", map.get("page"));//小程序页面路径
        weapp_template_msg.put("form_id", map.get("form_id"));//小程序模板消息formid
        weapp_template_msg.put("data", data);//小程序模板数据
        weapp_template_msg.put("weapp_template_msg", "");//小程序模板放大关键词
        
		sendWechatMsgToUser(openId, weapp_template_msg, null);
	}
	
	/**
	 * 订单状态通知-公众号提醒
	 * @param openId
	 * @param map
	 */
	public static void orderStatusChangePush(String openId , Map<String, String> map){
		Map<String,TemplateData> param = new HashMap<>();
		String color = "#00000";
        param.put("first",new TemplateData(map.get("first"),color));//标题
        param.put("keyword1",new TemplateData(map.get("keyword1"),color));//订单号
        param.put("keyword2",new TemplateData(map.get("keyword2"),color));//订单状态
        param.put("keyword3",new TemplateData(map.get("keyword3"),color));//商品名称
        param.put("remark",new TemplateData(map.get("remark"),"#3A92D9"));//备注
		
		String template_id = "brmpocCjvy6zql7zOAl9R5vJ0JhymlTH77o4Sg2N01Q";
		String url = map.get("url");
		Map<String, String> miniprogramMap = new HashMap<>();
		miniprogramMap.put("appid", WechatXcxApi.getAppid()); //注意，需要传小程序的APPID，必须与公众号绑定
		miniprogramMap.put("pagepath", map.get("pagepath")); //注意，官方的文档写的是pagepath是错误的
		
        //公众号模板消息
        JSONObject mp_template_msg = new JSONObject();
        mp_template_msg.put("appid", WechatApi.getMpAppid());
        mp_template_msg.put("template_id", template_id);//公众号模板ID\
        mp_template_msg.put("url", url);
        mp_template_msg.put("miniprogram", miniprogramMap);
        mp_template_msg.put("data", param);//模板数据
        
		sendWechatMsgToUser(openId, null, mp_template_msg);
	}
	
	
	/**
	 * 新订单提醒-公众号提醒
	 * @param openId
	 * @param map
	 */
	public static void newOrderPush(String openId , Map<String, String> map){
		Map<String,TemplateData> param = new HashMap<>();
		String color = "#00000";
        param.put("first",new TemplateData(map.get("first"),color));//标题
        param.put("keyword1",new TemplateData(map.get("keyword1"),color));//订单号
        param.put("keyword2",new TemplateData(map.get("keyword2"),color));//订单时间
        param.put("remark",new TemplateData(map.get("remark"),"#E93B1F"));//备注
		
		String template_id = "HBENMpzZ6oOEAatwHgMJnPf6rt5pRGS7-vK465X2KJI";
		String url = map.get("url");
		Map<String, String> miniprogramMap = new HashMap<>();
		miniprogramMap.put("appid", WechatXcxApi.getAppid()); //注意，需要传小程序的APPID，必须与公众号绑定
		miniprogramMap.put("pagepath", map.get("pagepath")); //注意，官方的文档写的是pagepath是错误的
		
        //公众号模板消息
        JSONObject mp_template_msg = new JSONObject();
        mp_template_msg.put("appid", WechatApi.getMpAppid());
        mp_template_msg.put("template_id", template_id);//公众号模板ID\
        mp_template_msg.put("url", url);
        mp_template_msg.put("miniprogram", miniprogramMap);
        mp_template_msg.put("data", param);//模板数据
        
		sendWechatMsgToUser(openId, null, mp_template_msg);
	}
	
	/**
	 * 收益到账通知-公众号提醒
	 * @param openId
	 * @param map
	 */
	public static void earningPush(String openId , Map<String, String> map){
		Map<String,TemplateData> param = new HashMap<>();
		String color = "#00000";
        param.put("first",new TemplateData(map.get("first"),"#1AE66B"));//标题
        param.put("keyword1",new TemplateData(map.get("keyword1"),color));//订单号
        param.put("keyword2",new TemplateData(map.get("keyword2"),color));//订单金额
        param.put("keyword3",new TemplateData(map.get("keyword3"),color));//收益金额
        param.put("keyword4",new TemplateData(map.get("keyword4"),color));//时间
        param.put("remark",new TemplateData(map.get("remark"),"#CC5233"));//备注
		
		String template_id = "-vyYUc0smkVifhvZd01VLoCdWIVow1E4ar3lGnmmxEk";
		String url = map.get("url");
		Map<String, String> miniprogramMap = new HashMap<>();
		miniprogramMap.put("appid", WechatXcxApi.getAppid()); //注意，需要传小程序的APPID，必须与公众号绑定
		miniprogramMap.put("pagepath", map.get("pagepath")); //注意，官方的文档写的是pagepath是错误的
		
        //公众号模板消息
        JSONObject mp_template_msg = new JSONObject();
        mp_template_msg.put("appid", WechatApi.getMpAppid());
        mp_template_msg.put("template_id", template_id);//公众号模板ID\
        mp_template_msg.put("url", url);
        mp_template_msg.put("miniprogram", miniprogramMap);
        mp_template_msg.put("data", param);//模板数据
        
		sendWechatMsgToUser(openId, null, mp_template_msg);
	}
	
	/**
	 * 接单通知-公众号提醒
	 * @param openId
	 * @param map
	 */
	public static void jiedanPush(String openId , Map<String, String> map){
		Map<String,TemplateData> param = new HashMap<>();
		String color = "#00000";
        param.put("first",new TemplateData(map.get("first"),"#D60F12"));//标题
        param.put("keyword1",new TemplateData(map.get("keyword1"),color));//订单号
        param.put("keyword2",new TemplateData(map.get("keyword2"),color));//状态
        param.put("keyword3",new TemplateData(map.get("keyword3"),color));//时间
        param.put("keyword4",new TemplateData(map.get("keyword4"),color));//网点
        param.put("remark",new TemplateData(map.get("remark"),color));//备注
		
		String template_id = "0rg-wsGfYS2cCfbHQNwKQ4p9pu14ibg4j-zxIqahLDc";
		String url = map.get("url");
		Map<String, String> miniprogramMap = new HashMap<>();
		miniprogramMap.put("appid", WechatXcxApi.getAppid()); //注意，需要传小程序的APPID，必须与公众号绑定
		miniprogramMap.put("pagepath", map.get("pagepath")); //注意，官方的文档写的是pagepath是错误的
		
        //公众号模板消息
        JSONObject mp_template_msg = new JSONObject();
        mp_template_msg.put("appid", WechatApi.getMpAppid());
        mp_template_msg.put("template_id", template_id);//公众号模板ID\
        mp_template_msg.put("url", url);
        mp_template_msg.put("miniprogram", miniprogramMap);
        mp_template_msg.put("data", param);//模板数据
        
		sendWechatMsgToUser(openId, null, mp_template_msg);
	}

	/**
	 * 发送微信模板消息
	 * @param touser
	 * @param weapp_template_msg
	 * @param mp_template_msg
	 * @return
	 */
	private static String sendWechatMsgToUser(String touser, JSONObject weapp_template_msg, JSONObject mp_template_msg) {
		try {
			//创建一个独立的线程，让业务不卡顿
			new Thread(new Runnable() {
				@Override
				public void run() {
					String sendUrl = WechatXcxApi.send_template_msg();
					JSONObject json = new JSONObject();
					json.put("touser", touser);
					if(weapp_template_msg != null){
						json.put("weapp_template_msg",weapp_template_msg);
					}
					if(mp_template_msg != null){
						json.put("mp_template_msg", mp_template_msg);
					}
					logger.info("微信推送请求数据:" + json.toString());

					String resultJson = HttpUtils.sendPost(sendUrl,json.toString());// HttpInteractionUtil.executeHttpPost(sendUrl, json.toString());
					//logger.info("微信推送下单信息返回数据:" + resultJson);
					JSONObject jsonObject = JSONObject.parseObject(resultJson);
					if (jsonObject == null) {
						throw new BusinessException("微信推送下单成功推送失败");
					}
//					String errcode = jsonObject.get("errcode").toString();
//					if (!"0".equals(errcode)) { // 如果为errmsg为ok，则代表发送成功，公众号推送信息给用户了。
//						return "error";
//					}
				}
			}).start();
		}
		catch (Exception e) {
		}
			
		return "success";
	}
}
